//柯里化封装
// 支持多参数传递
function progressCurrying(fn, args) {
    var _this = this			
    var len = fn.length;		//函数的length可以获取形参个数
    var args = args || [];		//预定义参数

    return function() {
        var _args = [].slice.call(arguments);	//可以写为Array.prototype.slice.call(arguments)  类数组转为数组
        Array.prototype.push.apply(args, _args);	//实际上可以写成args.concat(_args)

        // 如果参数个数小于最初的fn.length，则递归调用，继续收集参数
        if (_args.length < len) {
            return progressCurrying.call(_this, fn, _args);
        }

        // 参数收集完毕，则执行fn
        return fn.apply(this, _args);
    }
}